using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._DistributedGeodatabase
{
    /// <summary>
    /// <para>Import Message</para>
    /// <para>Imports changes from a delta file into a replica geodatabase.</para>
    /// <para>将更改从增量文件导入到复本地理数据库中。</para>
    /// </summary>    
    [DisplayName("Import Message")]
    public class ImportMessage : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportMessage()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_geodatabase">
        /// <para>Import To Replica Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_source_delta_file">
        /// <para>Import from Delta file</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public ImportMessage(object _in_geodatabase, object _source_delta_file)
        {
            this._in_geodatabase = _in_geodatabase;
            this._source_delta_file = _source_delta_file;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Import Message";

        public override string CallName => "management.ImportMessage";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_geodatabase, _source_delta_file, _output_acknowledgement_file, _conflict_policy.GetGPValue(), _conflict_definition.GetGPValue(), _reconcile_with_parent_version.GetGPValue(), _out_geodatabase];

        /// <summary>
        /// <para>Import To Replica Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Import To Replica Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geodatabase { get; set; }


        /// <summary>
        /// <para>Import from Delta file</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Import from Delta file")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _source_delta_file { get; set; }


        /// <summary>
        /// <para>Output Acknowledgement File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Acknowledgement File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _output_acknowledgement_file { get; set; } = null;


        /// <summary>
        /// <para>Conflict Resolution Policy</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Conflict Resolution Policy")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _conflict_policy_value _conflict_policy { get; set; } = _conflict_policy_value._MANUAL;

        public enum _conflict_policy_value
        {
            /// <summary>
            /// <para>MANUAL</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MANUAL")]
            [GPEnumValue("MANUAL")]
            _MANUAL,

            /// <summary>
            /// <para>IN_FAVOR_OF_IMPORTED_CHANGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IN_FAVOR_OF_IMPORTED_CHANGES")]
            [GPEnumValue("IN_FAVOR_OF_IMPORTED_CHANGES")]
            _IN_FAVOR_OF_IMPORTED_CHANGES,

            /// <summary>
            /// <para>IN_FAVOR_OF_DATABASE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IN_FAVOR_OF_DATABASE")]
            [GPEnumValue("IN_FAVOR_OF_DATABASE")]
            _IN_FAVOR_OF_DATABASE,

        }

        /// <summary>
        /// <para>Conflict Definition</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Conflict Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _conflict_definition_value _conflict_definition { get; set; } = _conflict_definition_value._BY_OBJECT;

        public enum _conflict_definition_value
        {
            /// <summary>
            /// <para>BY_OBJECT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BY_OBJECT")]
            [GPEnumValue("BY_OBJECT")]
            _BY_OBJECT,

            /// <summary>
            /// <para>BY_ATTRIBUTE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BY_ATTRIBUTE")]
            [GPEnumValue("BY_ATTRIBUTE")]
            _BY_ATTRIBUTE,

        }

        /// <summary>
        /// <para>Reconcile with the Parent Version (Check-out replicas)</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reconcile with the Parent Version (Check-out replicas)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _reconcile_with_parent_version_value _reconcile_with_parent_version { get; set; } = _reconcile_with_parent_version_value._false;

        public enum _reconcile_with_parent_version_value
        {
            /// <summary>
            /// <para>RECONCILE </para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECONCILE ")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_RECONCILE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_RECONCILE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Replica Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Replica Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_geodatabase { get; set; }


        public ImportMessage SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}